home *** CD-ROM | disk | FTP | other *** search
Text File | 1999-06-25 | 6.0 KB | 222 lines | [TEXT/CWIE] |
- /* File "PSdemo4.c" - Phase Shift plugin module, sample plugin implementation */
-
- //#include "PSmain.h"
- #include <Types.h>
- #include <QuickDraw.h>
- #include <LowMem.h>
-
- #include "LayerManager.h"
-
- OSErr InitPSModule(long *ticks);
- OSErr DrawPSModule(GrafPtr deskPort, Boolean idle);
- void ClosePSModule(void);
-
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* Preprocessor Defines */
-
- #define kFraction 8
- #define kPieces 9
-
- #define qWidth() ((*GetGrayRgn())->rgnBBox.right - (*GetGrayRgn())->rgnBBox.left)
- #define qHeight() ((*GetGrayRgn())->rgnBBox.bottom - (*GetGrayRgn())->rgnBBox.top)
-
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* Global/Static Data */
-
- static GWorldPtr gw = nil;
- static PixMapHandle pm = nil;
-
- #define JGNEFilter 0x0000029A
- UniversalProcPtr GNEOriginal;
- short myJGNEFilter (register EventRecord *theEvent:__A1, register short eventresult:__D0);
-
- typedef short (*GNEProcPtr) (register EventRecord *theEvent:__A1, register short eventresult:__D0);
- #define callGNE(userRoutine, theEvent, eventresult) \
- (*(GNEProcPtr)(userRoutine))((theEvent), (eventresult))
-
-
-
- static Boolean GetAppProcess(OSType pCreator, ProcessSerialNumber *pProcess, FSSpec *pProcFile)
- {
- ProcessInfoRec sProcInfo;
- Boolean sFound = false;
-
- if (true /* gsHasProcessManager */) {
- pProcess->highLongOfPSN = 0;
- pProcess->lowLongOfPSN = kNoProcess;
- sProcInfo.processInfoLength = sizeof(ProcessInfoRec);
- sProcInfo.processName = nil;
- sProcInfo.processAppSpec = pProcFile;
- while ((!sFound) && (GetNextProcess(pProcess) == noErr)) {
- if (GetProcessInformation(pProcess, &sProcInfo) == noErr) {
- if (sProcInfo.processSignature == pCreator) {
- if ((sProcInfo.processType == 'APPL') ||
- (sProcInfo.processType == 'appe') ||
- (sProcInfo.processType == 'appc'))
- sFound = true;
- }
- }
- }
- if (!sFound) {
- pProcess->highLongOfPSN = 0;
- pProcess->lowLongOfPSN = kNoProcess;
- }
- }
- return(sFound);
- }
-
- static WindowPtr browserWin = nil;
-
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
-
- OSErr InitPSModule(long *ticks) {
- OSErr error = noErr;
- Rect bounds, temp;
- UInt32 i;
- Boolean foundBrowser = false;
-
- *ticks = 10;
-
- FSSpec browserFSSpec;
- ProcessSerialNumber browserPSN;
- if (!GetAppProcess('MSIE', &browserPSN, &browserFSSpec)) {
- if (GetAppProcess('MOSS', &browserPSN, &browserFSSpec)) foundBrowser = true;
- }
- else
- foundBrowser = true;
-
- if (foundBrowser) {
- WindowPtr fWin = GetFrontWindowFromProcess(&browserPSN);
- if (fWin) {
- browserWin = fWin;
-
- // install a jGNE
- // GNEOriginal = *((UniversalProcPtr*)JGNEFilter);
- // *((UniversalProcPtr*)JGNEFilter) = (UniversalProcPtr)myJGNEFilter;
-
- /*
- // setup a REALLY BIG region...
- Rect bigRect = { -32000, -32000, 32000, 32000 };
- RgnHandle bigRgn = NewRgn();
- RectRgn(bigRgn, &bigRect);
-
- browserWin->visRgn = bigRgn;
- browserWin->clipRgn = bigRgn;
- */
-
- Rect gwRect = (*((CGrafPtr)browserWin)->portPixMap)->bounds; // (*GetMainDevice())->gdRect;
-
- if ((error = NewGWorld(&gw, (*((CGrafPtr)browserWin)->portPixMap)->pixelSize,
- &gwRect, nil, GetMainDevice(),
- noNewDevice)) != noErr) return(error);
- LockPixels(pm = GetGWorldPixMap(gw));
-
- CopyBits(&fWin->portBits, (BitMap *) *pm, &browserWin->portRect,
- &browserWin->portRect, srcCopy, nil);
-
- RGBColor foo = {2000, 2000, 2000};
- GrafPtr oldPort;
- GetPort(&oldPort);
- SetPort(browserWin);
- SetPortPix(pm);
- RGBBackColor(&foo);
- EraseRect(&browserWin->portRect);
- SetPort(oldPort);
- }
- }
- return(noErr);
- }
-
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
-
- OSErr DrawPSModule(GrafPtr grafport, Boolean idle)
- {
- if (browserWin) {
- GWorldPtr saveGW;
- GDHandle saveGD;
- Rect srcRect = browserWin->portRect, destRect = browserWin->portRect;
-
- OffsetRect(&destRect, -destRect.left, -destRect.top);
-
- SetRectRgn(browserWin->visRgn, -32000, -32000, 32000, 32000);
- SetRectRgn(browserWin->clipRgn, -32000, -32000, 32000, 32000);
- SetRectRgn(((WindowPeek)browserWin)->updateRgn, -32000, -32000, 32000, 32000);
-
- OffsetRect(&destRect, 0, GetMBarHeight());
- CopyBits((BitMap *) *pm, &grafport->portBits, &srcRect, &destRect, srcCopy, nil);
-
-
- GrafPtr oldPort;
- GetPort(&oldPort);
- SetPort(browserWin);
- InvalRect(&browserWin->portRect);
- SetPort(oldPort);
-
- }
-
- return(noErr);
- }
-
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
- /* **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** */
-
- void ClosePSModule()
- {
- // *((UniversalProcPtr*)JGNEFilter) = (UniversalProcPtr)GNEOriginal;
- }
-
-
- short myJGNEFilter (register EventRecord *theEvent:__A1, register short eventresult:__D0)
- {
- static Boolean inJGNE = false; // used to track reentrancy, just in case
- short result = eventresult;
- EventRecord *e = theEvent;
-
- // let's check to see if we're being reentered!
- if (inJGNE) goto bail;
- inJGNE = true; // we are now...
-
- if (GNEOriginal) // just in case...
- result = callGNE(GNEOriginal, e, result);
-
- switch ( theEvent->what ) {
- case mouseDown:
- WindowPtr whichWindow;
- short whichPart;
-
- whichPart = FindWindow ( theEvent->where, &whichWindow );
- switch ( whichPart ) {
- }
- break;
-
- case keyDown:
- case autoKey:
- break;
-
- case updateEvt:
- WindowPtr curWin = (WindowPtr) theEvent->message;
- if (curWin == browserWin) {
- SetRectRgn(browserWin->visRgn, -32000, -32000, 32000, 32000);
- SetRectRgn(browserWin->clipRgn, -32000, -32000, 32000, 32000);
- }
- break;
-
- case activateEvt:
- break;
-
- case nullEvent:
- default:
- break;
- }
-
- safeExit:
- inJGNE = false; // not any more, we're on the way out...
-
- bail:
- return(result);
- }
-